/*
 * Celda.cpp
 *
 *  Created on: Oct 26, 2013
 *      Author: javier
 */

#include "Celda.h"
#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
#include "JsonLevel.h"

using Golosinas::Pieza;
using Golosinas::Button;
using Golosinas::GoldenStar;
using Golosinas::MiniBar;

Celda::Celda(Pieza * p, CeldaBase * CeldaAnt) {
	this->miPieza = p;
	this->ptrCeldaAnt = CeldaAnt;
}

//Celda::Celda(CeldaBase * CeldaAnt){
//	this->ptrCeldaAnt = CeldaAnt;
//	miPieza = generarPieza();
//}

Celda::~Celda() {
	// TODO Auto-generated destructor stub
}


//void Celda::llenarAleatoriamente(){
//	miPieza = generarPieza();
//	std::cout << "generada Pieza: " << miPieza->getColor() << std::endl;
//}

std::string Celda::imprimir(){
	std::stringstream ss;
	ss << miPieza->getColor();
	std::string str = ss.str();
	return str;
}

Pieza *  Celda::getGolosina(){
	return miPieza;
}

void Celda::reemplazarPieza(Pieza * p){
	miPieza = p;
}

void Celda::setGolosina(Pieza * p){
	miPieza = p;
}

bool Celda::operator ==(CeldaBase& c){
	if (this->getGolosina() != NULL && c.getGolosina() != NULL){
		return (this->getColorGolosina() == c.getColorGolosina());
	}
	return false;
}

Pieza::color Celda::getColorGolosina(){
	return miPieza->getColor();
}

int Celda::eliminarContenido(){
	int temp = miPieza->getPuntos();
	delete miPieza;
	return temp;
}

bool Celda::intercambiarGolosina(CeldaBase& c){
	Pieza * tmp;
	tmp = c.getGolosina();
	//Si c no tiene golosinas, ya sea porque es una celdaVacia o porque esa
	//celda se quedo sin golosinas, no hago nada
	if (tmp == NULL){
		return false;
	}else if (this->getColorGolosina() != c.getColorGolosina() || c.getColorGolosina() == Pieza::dorado){
		c.setGolosina(this->getGolosina());
		this->setGolosina(tmp);
		return true;
	}
	return false;

}

Pieza * Celda::darGolosina(int nCol){
	if (miPieza == NULL){
		miPieza = pedirGolosina(nCol);
	}
	return miPieza;
}

Pieza * Celda::pedirGolosina(int nCol){
	if (ptrCeldaAnt == NULL){
		//return generarPieza();
		return JsonLevel::getPiezaProb(nCol);
	} else {
		return ptrCeldaAnt->darGolosina(nCol);
	}
}

CeldaSDL* Celda::getVista(unsigned int x, unsigned int y, unsigned int num){
	return new CeldaSDL(true, x, y, num);
}

bool Celda::isVacia(){
	return false;
}

//Genera una pieza random


